视频编辑技术文章和OpenGL学习资料汇总

  |  

此文收集了当前的一些视频编辑平台术分享的一些技术文章,和OpenGL的一些学习资料,便于学习和借鉴。站在巨人的肩上可以看得更远。收集也是学习的一个阶段。

它山之石

小咖秀的视频处理
android平台短视频技术之 视频编辑的经验分享
性能比肩美拍秒拍的Android视频录制编辑特效解决方案
Android视频录制app解决方案汇总
短视频处理方案概述
FFmepg性能限制

可以攻玉

NexEditor SDK
蓝松科技SDK
锐动天地

竞品分析

Top10 Android Video Editing Apps

Filmora

Filmora Effects Store

OpenGL

Android OpenGL
OpenGL canvas
Android弹幕-OpenGL
A real OpenGL ES 2.0 2D tutorial part
安卓OpenGL ES 2.0入门-1
安卓OpenGL ES 2.0入门-2
OpenGL学习文档
OpenGL ES Android lesson
OpenGL ES 学习笔记
OpenGL播放视频
学习OpenGL之类比画画
OpenGL ES 学习博客
OpenGL tutorial
Android OpenGL基础入门

GLSL语言

GLSL中文手册
GLSL语言

其他

图像技术在直播中的应用

直播
Android中直播视频技术探究之—-摄像头Camera视频源数据采集解析
Android中直播视频技术探究之–基础知识
Android中直播视频技术探究之–ByteBuffer解析

Android平台美颜相机/Camera实时滤镜/视频编解码/影像后期/人脸技术探索——系统总体设计
Android平台美颜相机、实时滤镜、人脸技术探秘
Android中直播视频技术探究–基础知识大纲介绍
ffmpeg 命令
视频应用
OpenGL概述

Android 高性能图形处理

StackOverFlow

display-two-videos-together-then-output-as-a-merged-video-on-a-single-screen

play-video-with-openglES

备忘

shader中的变量

OpenGL ES 变量总结

uniform变量

uniform变量是外部application程序传递给(vertex和fragment)shader的变量。因此它是application通过函数glUniform**()函数赋值的。在(vertex和fragment)shader程序内部,uniform变量就像是C语言里面的常量(const ),它不能被shader程序修改(shader只能用,不能改)。
如果uniform变量在vertex和fragment两者之间声明方式完全一样,则它可以在vertex和fragment共享使用(相当于一个被vertex和fragment shader共享的全局变量)。
uniform变量一般用来表示:变换矩阵,材质,光照参数和颜色等信息。
以下是例子:

1
2
3
uniform mat4 viewProjMatrix; //投影+视图矩阵
uniform mat4 viewMatrix; //视图矩阵
uniform vec3 lightPosition; //光源位置

attribute变量

attribute变量是只能在vertex shader中使用的变量,它不能在fragment shader中声明attribute变量,也不能被fragment shader中使用。
一般用attribute变量来表示一些顶点的数据,如:顶点坐标,法线,纹理坐标,顶点颜色等。
在application中,一般用函数glBindAttribLocation()来绑定每个attribute变量的位置,然后用函数glVertexAttribPointer()为每个attribute变量赋值。

以下是例子:

1
2
3
4
5
6
7
8
9
uniform mat4 u_matViewProjection;
attribute vec4 a_position;
attribute vec2 a_texCoord0;
varying vec2 v_texCoord;
void main(void)
{
gl_Position = u_matViewProjection * a_position;
v_texCoord = a_texCoord0;
}

varying变量

varying变量是vertex和fragment shader之间做数据传递用的。一般vertex shader修改varying变量的值,然后fragment shader使用该varying变量的值。因此varying变量在vertex和fragment shader二者之间的声明必须是一致的。application不能使用此变量。
例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/ Vertex shader
uniform mat4 u_matViewProjection;
attribute vec4 a_position;
attribute vec2 a_texCoord0;
varying vec2 v_texCoord; // Varying in vertex shader
void main(void)
{
gl_Position = u_matViewProjection * a_position;
v_texCoord = a_texCoord0;
}
// Fragment shader
precision mediump float;
varying vec2 v_texCoord; // Varying in fragment shader
uniform sampler2D s_baseMap;
uniform sampler2D s_lightMap;
void main()
{
vec4 baseColor;
vec4 lightColor;
baseColor = texture2D(s_baseMap, v_texCoord);
lightColor = texture2D(s_lightMap, v_texCoord);
gl_FragColor = baseColor * (lightColor + 0.25);
}

顶点着色器

这个是告诉电脑如何打线稿的——如何处理顶点、法线等的数据的小程序。

顶点着色器必须对 gl_Position 赋值,OpenGL 会把这个值作为当前顶点的最终位置,并把这些顶点组装成点、直线和三角形。

片段着色器

这个是告诉电脑如何上色的——如何处理光、阴影、遮挡、环境等等对物体表面的影响,最终生成一副图像的小程序。

片段着色器必须对 gl_FragColor 进行赋值, OpenGL 会使用这个颜色作为当前片段的最终颜色。

光栅化Rasterize: 就是从矢量的点线面的描述,变成像素的描述。

在Android中Camera产生的preview texture是以一种特殊的格式传送的,因此shader里的纹理类型并不是普通的sampler2D,而是samplerExternalOES, 在shader的头部也必须声明OES的扩展「#extension GL_OES_EGL_image_external : require」。除此之外,external OES的纹理和Sampler2D在使用时没有差别。

采用了这两种着色器小程序 的 数据传输处理计算的渲染过程,称之为 可编程管线。

文章目录
  1. 1. 它山之石
  2. 2. 可以攻玉
  3. 3. 竞品分析
  4. 4. Filmora
  5. 5. OpenGL
  6. 6. GLSL语言
  7. 7. 其他
  8. 8. StackOverFlow
  9. 9. 备忘
    1. 9.1. shader中的变量
      1. 9.1.1. uniform变量
      2. 9.1.2. attribute变量
      3. 9.1.3. varying变量
    2. 9.2. 顶点着色器
    3. 9.3. 片段着色器
,